341-计算机网络基础 for Socket网络编程

ip地址

IP地址就是标识网络中设备的一个地址,好比现实生活中的家庭地址。

ip地址分为ipv4(如:10.21.127.9)和ipv6(如:fe80:78a0:17e7:fef7:52dc%16),主流用ipv4

ipv4由点分十进制组成
ipv6由点分十六进制组成

查看ip地址:

计算机中一般由两个IP地址:

  1. 上网IP地址:192.168.1.222
  2. 本地回环IP:127.0.0.1(for 本地测试)

检测网络是否能连通(连通性):
cmd:ping <目标机器ip/网址>

端口

由ip只能找到计算机,通信需要通过端口

每运行一个网络程序都会有一个端口,想要给对应的程序发送数据,找到对应的端口即可

端口号分类

注:当运行一个程序默认会有一个端口号,当这个程序退出时,所占用的这个端口号就会被释放。

传输控制协议

数据传输要遵循数据传输协议 -> TCP/UDP

TCP概念

TCP的英文全拼(TransmissionControlProtocol)简称传输控制协议,它是一种面向连接的可靠的基于字节流的传输层通信协议。

TCP通信步骤:①创建连接②传输数据③关闭连接

UDP协议(不可靠,速度快)

延迟低、速度快、不可靠:对数据质量要求不高,只对速度要求

socket套接字工具

TCP网路编程也叫套接字编程

到目前为止我们学习了IP地址和端口号还有TCP传输协议,为了保证数据的完整性和可靠性我们使用TCP传输协议进行数据的传输,为了能够找到对应设备我们需要使用IP地址,为了区别某个端口的应用程序接收数据我们需要使用端口号,那么通信数据是如何完成传输的呢?

socket(简称套接字)是进程之间通信一个工具,好比现实生活中的插座,所有的家用电器要想工作都是基于插座进行进程之间想要进行网络通信需要基于这个socket。

socket的作用与应用场景

socket的作用:负责进程之间的网络数据传输,好比数据的搬运工。

socket使用场景:|
不夸张的说,只要跟网络相关的应用程序或者软件底层都使用到了socket。

TCP协议和UDP协议的对比

  1. TCP 协议和 UDP 协议的区别
    • 连接方式
      • TCP:是面向连接的协议。在数据传输之前,需要通过三次握手建立连接,传输结束后通过四次挥手来释放连接,这个过程保证了通信双方能够可靠地传输数据。
      • UDP:是无连接的协议。发送数据之前不需要建立连接,只要知道对方的 IP 地址和端口号就可以直接发送数据,这样减少了建立和释放连接的开销,但也意味着数据传输的可靠性较低。
    • 可靠性
      • TCP:可靠性高。它通过序列号、确认号、校验和等机制来保证数据的有序、无差错传输。如果数据在传输过程中丢失或者损坏,接收方会要求发送方重传数据。
      • UDP:不保证数据传输的可靠性。它只是尽力将数据发送出去,数据可能会出现丢失、重复或者乱序的情况,接收方不会对发送方进行确认,发送方也不会知道数据是否被正确接收。
    • 传输方式
      • TCP:基于字节流的传输方式,将应用层的数据看作是无结构的字节序列进行传输,它会对字节流进行编号和排序,在接收端按照顺序重组字节流并交给应用层。
      • UDP:基于数据报的传输方式,应用层数据被封装成一个个独立的数据报进行发送,每个 UDP 数据报都有自己的长度、校验和等信息,接收方收到的数据报就是发送方发送的原始数据报,不会对数据进行合并或者拆分。
    • 传输效率
      • TCP:由于需要建立连接、进行可靠性保证等操作,其协议头相对复杂,数据传输过程中的开销较大,传输效率相对较低。不过在网络环境较好的情况下,通过滑动窗口等机制可以实现高效传输。
      • UDP:协议头简单,没有复杂的连接建立和维护机制,也不需要进行大量的确认和重传操作,因此传输效率高,但是在网络质量较差的情况下,可能需要应用层自己来实现数据的可靠性保证。
    • 流量控制和拥塞控制
      • TCP:具备完善的流量控制和拥塞控制机制。通过滑动窗口进行流量控制,防止接收方缓冲区溢出;利用多种拥塞控制算法(如慢启动、拥塞避免、快速重传和快速恢复)来避免网络拥塞,确保网络的稳定性和可靠性。
      • UDP:没有流量控制和拥塞控制机制。它只是简单地发送数据报,不会根据网络的情况和接收方的状态来调整发送速率,这可能会导致网络拥塞或者接收方无法处理过多的数据。
  2. 真实业务场景中的使用区别
    • 文件传输场景(适合 TCP)
      • 需求分析:在文件传输过程中,数据的完整性和准确性是至关重要的。用户希望文件能够完整无误地从源端传输到目的端,并且能够知道传输的进度。
      • TCP 优势:TCP 的可靠性机制可以保证文件数据的正确传输。例如,在使用 FTP(文件传输协议)传输文件时,TCP 通过序列号和确认号来确保每个字节的数据都能准确到达目的地。如果在传输过程中出现数据丢失或者错误,接收方可以通过序列号告知发送方重传相应的数据部分。同时,TCP 的流量控制机制可以根据接收方的缓冲区情况调整发送速度,避免接收方因为来不及接收而导致数据丢失。
    • 视频直播场景(适合 UDP)
      • 需求分析:视频直播对实时性要求很高,用户可以接受少量的数据丢失,但不能忍受较大的延迟。即使丢失了一些视频帧,只要不影响整体的观看体验即可。
      • UDP 优势:UDP 的传输效率高、延迟小,能够满足视频直播实时性的要求。例如,在一些实时视频直播平台中,使用 UDP 协议传输视频流。由于 UDP 不需要建立连接和进行复杂的可靠性保证,数据可以快速地发送出去,减少了延迟。虽然可能会出现少量视频帧丢失的情况,但因为视频本身具有一定的冗余信息,并且人的视觉对于少量帧丢失不太敏感,所以 UDP 协议在这种场景下是比较合适的选择。
    • 电子邮件发送场景(适合 TCP)
      • 需求分析:电子邮件内容包括文字、附件等,需要保证邮件内容完整、准确地发送到邮件服务器并存储。发送过程中的数据丢失或者错误可能会导致邮件信息不完整或者无法正常发送。
      • TCP 优势:TCP 的可靠性保证能够满足电子邮件发送的需求。例如,SMTP(简单邮件传输协议)使用 TCP 协议,在发送邮件时,通过 TCP 的三次握手建立连接后开始传输邮件内容,发送方会收到接收方的确认信息,确保邮件数据完整地传输到邮件服务器,保证了邮件发送的准确性和完整性。
    • DNS 查询场景(适合 UDP)
      • 需求分析:DNS(域名系统)查询主要是将域名转换为对应的 IP 地址,需要快速地获取查询结果,并且查询数据量相对较小。对于一次 DNS 查询来说,少量的数据丢失可以通过重新查询来解决。
      • UDP 优势:UDP 的高效传输特性使得 DNS 查询能够快速得到响应。由于 UDP 不需要建立连接的过程,所以查询请求可以更快地发送到 DNS 服务器,并且服务器的响应也能快速返回给客户端。虽然 UDP 可能会出现数据丢失的情况,但 DNS 查询本身具有幂等性,即重复查询不会对结果产生影响,所以即使丢失了一次查询请求,重新查询即可,不会对系统产生严重的后果。